home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / MUSIUSIC / SPKDD1.LZH / DRVSPKR.DOC < prev    next >
Text File  |  1986-11-13  |  48KB  |  1,580 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.                                 SPEAKER DEVICE DRIVER
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.                                      DRVSPKR.SYS
  29.  
  30.  
  31.  
  32.  
  33.                                     User's Guide
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.                             Version of November 13, 1986
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.                                        Preface
  59.  
  60.  
  61.  
  62.                     The loudspeaker provided on an IBM PC, XT and AT
  63.                computer is capable of a variety of audible outputs in
  64.                addition to the normal "beep".  However, there is
  65.                little or no supporting software provided in MS/DOS to
  66.                allow a program to make use of this capability.
  67.  
  68.                     In addition, the normal "beep" is a completely
  69.                processor-intensive operation, resulting in very er-
  70.                ratic operation of programs which occasionally have to
  71.                do a beep.  An example is DBASE III, which beeps at the
  72.                end of an input field.  Normally, such a beep ties up
  73.                the processor, such that it can do nothing else during
  74.                that time.  If several beeps have been queued, the wait
  75.                for all of these to finish can be quite an annoyance.
  76.  
  77.                     This document describes the Speaker Device Driver,
  78.                which provides a solution to these problems.
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.                              Table of Contents
  86.  
  87.  
  88.             1.  INTRODUCTION...................................1
  89.              1.1  The ShareWare Concept........................1
  90.               1.1.1  What You Can Do...........................1
  91.               1.1.2  What You Cannot Do........................2
  92.               1.1.3  What You Should Do........................2
  93.  
  94.             2.  INSTALLING THE SPEAKER DEVICE DRIVER...........4
  95.              2.1  Installing the Driver File...................4
  96.              2.2  Modifying Your CONFIG.SYS File...............4
  97.  
  98.             3.  FACILITIES OF THE SPEAKER DEVICE DRIVER........6
  99.              3.1  Checking Out Your Beep.......................6
  100.              3.2  Interrupt-Driven Operation...................7
  101.              3.3  Multiple Beep Suppression....................7
  102.              3.4  Non-Processor-Speed Dependent................8
  103.              3.5  Making A Beep................................8
  104.              3.6  Changing the Sound of Your Beep..............9
  105.              3.7  Producing a Sequence of Tones................9
  106.              3.8  Buffered Tone Generation....................10
  107.              3.9  A New Device................................10
  108.  
  109.             4.  SPEAKER DEVICE DRIVER COMMANDS................11
  110.              4.1  The Basics..................................11
  111.              4.2  Commands Available..........................12
  112.               4.2.1  F - Frequency............................12
  113.               4.2.2  G - Gap..................................12
  114.               4.2.3  D - Duration of Each Tone................13
  115.               4.2.4  T - Tempo................................13
  116.               4.2.5  P - Pause................................14
  117.               4.2.6  R - Resume...............................14
  118.               4.2.7  B - Begin Recording......................15
  119.               4.2.8  E - End Recording........................15
  120.               4.2.9  Unrecognized Commands....................15
  121.               4.2.10  Controlling the Volume..................15
  122.               4.2.11  Chords..................................16
  123.  
  124.             5.  HOW TO CONFIGURE YOUR BEEP....................17
  125.              5.1  Several More Example Beeps..................17
  126.  
  127.             6.  SENDING COMMANDS TO THE DRIVER................19
  128.              6.1  From A Program..............................19
  129.              6.2  From the Console Keyboard...................19
  130.              6.3  From a File.................................20
  131.               6.3.1  Sending Other Sequences..................21
  132.              6.4  Testing Your Beep...........................21
  133.  
  134.             7.  ABOUT THE AUTHOR..............................23
  135.  
  136.  
  137.  
  138.                                                                           i
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.           Speaker Device Driver User's Guide
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.           1.  INTRODUCTION
  153.  
  154.  
  155.                The loudspeaker provided on an IBM  PC,  XT  and  AT
  156.           computer  is  capable  of a variety of audible outputs in
  157.           addition to the normal "beep".  However,  there is little
  158.           or  no  supporting software provided in MS/DOS to allow a
  159.           program to make use of this capability.
  160.  
  161.                In addition,  the  normal  "beep"  is  a  completely
  162.           processor-intensive operation,  resulting in very erratic
  163.           operation of programs which occasionally  have  to  do  a
  164.           beep.  An example is DBASE III, which beeps at the end of
  165.           an  input  field.    Normally,  such  a  beep ties up the
  166.           processor,  such that it can do nothing else during  that
  167.           time.    If several beeps have been queued,  the wait for
  168.           all of these to finish can be quite an annoyance.    This
  169.           is  even  more  of  a problem when you are are on-line to
  170.           some other computer.  The beeps that you receive normally
  171.           tie up your communications software,  slowing  down  your
  172.           communications and in extreme cases causing data loss due
  173.           to buffer overrun.
  174.  
  175.                This  document  describes the Speaker Device Driver,
  176.           which provides a solution to these problems.
  177.  
  178.  
  179.           1.1  The ShareWare Concept
  180.  
  181.  
  182.                The "ShareWare" concept is basically  an  experiment
  183.           in  the  marketing and distribution of software.   It at-
  184.           tempts to cut down on distribution and marketing expenses
  185.           so that quality software can be made widely available  at
  186.           the  lowest  possible price.   This concept also makes it
  187.           possible for users to try the software before they decide
  188.           to keep (and, hopefully, pay) for it.  This is very handy
  189.           in a world full of competing packages!
  190.  
  191.  
  192.           1.1.1  What You Can Do
  193.  
  194.  
  195.  
  196.  
  197.           Rev. November 13, 1986 23:38:47                               -1-
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.           Speaker Device Driver User's Guide
  206.  
  207.  
  208.  
  209.  
  210.                This software is being placed into the public domain
  211.           as "ShareWare".   This means that you are  encouraged  to
  212.           copy  this  software  and  give it to your friends and/or
  213.           business associates.  You may also use it in a commercial
  214.           environment.  However,  you may not sell the software for
  215.           more  than  the cost of the diskette and a small handling
  216.           charge.   If you paid more than five or ten  dollars  for
  217.           the  diskette  with  this  software on it,  you have been
  218.           cheated!   Please advise the program's author (my address
  219.           appears  at  the  end  of this document) of the price you
  220.           paid, when, and from whom you purchased it.
  221.  
  222.                If you distribute a copy of this software to  anyone
  223.           else, you must distribute it complete and unchanged.  You
  224.           must not change the program,  the user's guide, or any of
  225.           the other files on the diskette.   (You are permitted  to
  226.           add additional files on the diskette if you like, as long
  227.           as  you  clearly  identify yourself in the files you add,
  228.           along with the date you add those files to the diskette).
  229.  
  230.                You will find,  especially if you have a hard  disk,
  231.           that this is a product you will use literally every day.
  232.  
  233.  
  234.           1.1.2  What You Cannot Do
  235.  
  236.  
  237.                As  just mentioned,  you cannot modify or delete any
  238.           of the files you find on the diskette  when  you  give  a
  239.           copy of it to anyone else.  If you base a product on this
  240.           one,  which you intend to sell for profit,  you must make
  241.           arrangements for such  use  with  me  first.    Extremely
  242.           reasonable licensing terms for such use are available.
  243.  
  244.  
  245.           1.1.3  What You Should Do
  246.  
  247.  
  248.                If you end up liking and using this product (and you
  249.           will),  you  should  make a contribution to the program's
  250.           author at the address found later on  in  this  document.
  251.           By  doing so,  I can keep you posted on revisions and im-
  252.           provements to this Speaker Device Driver as  they  become
  253.           available.    I  can also let you know about other useful
  254.  
  255.  
  256.  
  257.           Rev. November 13, 1986 23:38:54                               -2-
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.           Speaker Device Driver User's Guide
  266.  
  267.  
  268.  
  269.           software products as they become available from  time  to
  270.           time.    A contribution of ten dollars is suggested,  but
  271.           you may want to make it fifteen or twenty if you  end  up
  272.           using the product a lot.   Use your discretion based upon
  273.           what the product turns out to be worth to  you,  just  as
  274.           you would if you were leaving a tip in a nice restaurant.
  275.  
  276.                It  is  these  contributions which will make it pos-
  277.           sible to continue to develop this and  other  interesting
  278.           software products for you to use in the future.
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.           Rev. November 13, 1986 23:39:02                               -3-
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.           Speaker Device Driver User's Guide
  326.  
  327.  
  328.  
  329.  
  330.  
  331.           2.  INSTALLING THE SPEAKER DEVICE DRIVER
  332.  
  333.  
  334.                The  speaker  device  driver is provided as a single
  335.           file named "DRVSPKR.SYS".
  336.  
  337.  
  338.           2.1  Installing the Driver File
  339.  
  340.  
  341.                The file "DRVSPKR.SYS" should be placed in the  root
  342.           directory  of  the  drive from which MS/DOS will boot up.
  343.           For instance,  if you have received the speaker driver on
  344.           a  diskette,  and  that diskette is in your "a:" diskette
  345.           drive, execute the command:
  346.  
  347.                COPY A:DRVSPKR.SYS C:\DRVSPKR.SYS
  348.  
  349.                If your hard drive is something other than drive  C,
  350.           then  of  course  you would replace the C: above with the
  351.           drive letter corresponding to your hard drive.
  352.  
  353.  
  354.           2.2  Modifying Your CONFIG.SYS File
  355.  
  356.  
  357.                Once the device driver is  installed  on  your  hard
  358.           disk,  the  next step is to tell MS/DOS that you want the
  359.           system to install the driver each time it comes up.    To
  360.           do  this,  you  must edit the file in your root directory
  361.           called "CONFIG.SYS".   Specific  instructions  for  doing
  362.           this will,  of course, depend upon what editor you prefer
  363.           to use.   However,  you will want to add a line  to  your
  364.           "CONFIG.SYS" file which says:
  365.  
  366.                DEVICE=DRVSPKR.SYS
  367.  
  368.                Once  you  have  done  this,  and rewritten the CON-
  369.           FIG.SYS  file  to  your  disk,  you  should  reboot  your
  370.           machine.   From this point on, every time you reboot, the
  371.           Speaker Device Driver will automatically be available for
  372.           your use.
  373.  
  374.  
  375.  
  376.  
  377.           Rev. November 13, 1986 23:39:05                               -4-
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.           Speaker Device Driver User's Guide
  386.  
  387.  
  388.  
  389.                Perhaps the simplest way to add this  line  to  your
  390.           CONFIG.SYS file is to enter the command line:
  391.  
  392.                ECHO DEVICE=DRVSPKR.SYS >>\CONFIG.SYS
  393.  
  394.                If you use the command line just above, be sure that
  395.           you  use  two of the right-pointy-brackets.   This causes
  396.           the new line to be added at the end of your existing CON-
  397.           FIG.SYS file.   If you use only one,  you will completely
  398.           overwrite any existing CONFIG.SYS file that you might al-
  399.           ready have.
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.           Rev. November 13, 1986 23:39:11                               -5-
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.           Speaker Device Driver User's Guide
  446.  
  447.  
  448.  
  449.  
  450.  
  451.           3.  FACILITIES PROVIDED BY THE SPEAKER DEVICE DRIVER
  452.  
  453.  
  454.                Once you have installed the Speaker Device Driver as
  455.           described  in the previous chapter,  you have several new
  456.           things that you may notice.
  457.  
  458.  
  459.           3.1  Checking Out Your Beep
  460.  
  461.  
  462.                The first thing that you might notice  is  that  the
  463.           way  your  machine sounds when it makes a "beep" is prob-
  464.           ably different.   You can check this by entering the com-
  465.           mand line:
  466.  
  467.                ECHO ^G
  468.  
  469.                This  will  tell your machine to make a single beep.
  470.           It is even a better demonstration if you tell it to  make
  471.           several beeps:
  472.  
  473.                ECHO ^G^G^G^G^G^G^G^G^G^G
  474.  
  475.                The terminology in the lines above,  "^G",  does not
  476.           indicate that you should type the two characters "^"  and
  477.           "G",  (although  it will echo to your display the same as
  478.           if you did!).   Instead,  what this means is to press and
  479.           hold down the Control key (probably labelled "Ctrl"), and
  480.           while  it  is held down,  then also pressing the "G" key.
  481.           You will observe that the result will display as "^G"  as
  482.           shown on the above command line.
  483.  
  484.                When  you  then  press  the ENTER key,  your machine
  485.           should beep.   If you try this  before  you  install  the
  486.           speaker  device  driver,  you will notice that there is a
  487.           distinct pause before the regular MS/DOS prompt  returns.
  488.           In  the longer example where you type a bunch of Control-
  489.           G's,  the pause will be quite long!   However,  once  the
  490.           speaker  device  driver  is installed,  that pause should
  491.           disappear.
  492.  
  493.                This  is  because  the  Speaker  Device  Driver   is
  494.  
  495.  
  496.  
  497.           Rev. November 13, 1986 23:39:14                               -6-
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.           Speaker Device Driver User's Guide
  506.  
  507.  
  508.  
  509.           "interrupt-driven".
  510.  
  511.  
  512.           3.2  Interrupt-Driven Operation
  513.  
  514.  
  515.                Normally,  when the PC (or XT or AT) makes a beep or
  516.           other sound, it is sitting in a tight program loop,  com-
  517.           pletely  busy,  moving the speaker cone back and forth to
  518.           produce the sound that you hear.  However,  the designers
  519.           of the PC made it possible to tell the machine's hardware
  520.           to  produce the sound by itself,  allowing the program to
  521.           go on ahead doing more useful work.
  522.  
  523.                The speaker device driver hooks into MS/DOS's  timer
  524.           interrupt.   This interrupt,  which occurs about eighteen
  525.           times per second, allows the speaker device driver to get
  526.           control every once in a while.   (Don't worry about  just
  527.           how  this  happens,  it is quite automatic and invisible!
  528.           And,  the speaker device driver uses an  extremely  small
  529.           amount of processor time,  so that it will not affect the
  530.           execution time of your other programs).
  531.  
  532.                The speaker device  driver,  when  it  gets  control
  533.           about  eighteen  times  per  second,  can do one of three
  534.           things.  It can do nothing (the usual case),  or turn the
  535.           speaker "on" (to make it start producing a tone), or turn
  536.           the speaker "off",  stopping the tone it had been produc-
  537.           ing.
  538.  
  539.                During the rest of the time,  the speaker is  either
  540.           turned off or producing a tone,  while your programs con-
  541.           tinue to run normally.    With  the  speaker  driver  in-
  542.           stalled,  they  no longer have to pause when they have to
  543.           make a beep.
  544.  
  545.  
  546.           3.3  Multiple Beep Suppression
  547.  
  548.  
  549.                You  have  probably  experienced  cases  where   the
  550.           program  you  were  running  decided  to  produce several
  551.           beeps.  (This can happen, for example,  if you have keyed
  552.           ahead  several characters,  which turn out to be invalid,
  553.           and your program beeps once for each invalid character it
  554.  
  555.  
  556.  
  557.           Rev. November 13, 1986 23:39:20                               -7-
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.           Speaker Device Driver User's Guide
  566.  
  567.  
  568.  
  569.           receives).  Sometimes, you have to wait quite a long time
  570.           until all the beeps for  the  queued-up  characters  have
  571.           been sounded, before you can continue.
  572.  
  573.                This can be especially frustrating if you are online
  574.           to  some service such as CompuServe,  and somebody on the
  575.           CB channel broadcasts a message containing a while  bunch
  576.           of "beep" commands in a row!
  577.  
  578.                The  speaker  device  driver,  besides allowing your
  579.           program to continue while  the  beeps  take  place,  also
  580.           automatically  suppresses  multiple  "beep" commands that
  581.           are received in  rapid  succession.    (In  other  words,
  582.           "beep" commands are not queued).
  583.  
  584.  
  585.           3.4  Non-Processor-Speed Dependent
  586.  
  587.  
  588.                The  fact  that  the speaker device driver is driven
  589.           from the timer interrupt,  which occurs at a fixed  rate,
  590.           also  means  that the way its beep sounds does not change
  591.           if the speed of your processor changes.    You  may  have
  592.           noticed   that  some  programs'  beeps  change  frequency
  593.           depending on whether they are running on a PC XT,  or  an
  594.           AT,  which is faster.  Likewise, some programs which make
  595.           sounds will sound different if you  have  an  accelerator
  596.           (or "turbo") board,  or the like.  These changes will not
  597.           affect the speaker device driver.   It should sound  just
  598.           the same, regardless of how fast (or slow) your processor
  599.           runs.
  600.  
  601.  
  602.           3.5  Making A Beep
  603.  
  604.  
  605.                Nearly  every  program which runs under MS/DOS makes
  606.           its beeps by calling a routine in the ROM  BIOS  provided
  607.           as  part  of the basic programming of every PC-compatible
  608.           machine.   Programs make such a beep by displaying an AS-
  609.           CII  "BELL"  character (so called because it used to ring
  610.           an actual,  mechanical bell on the old-fashioned mechani-
  611.           cal terminals).  This character is a binary 7, which also
  612.           happens to be a "Control-G".
  613.  
  614.  
  615.  
  616.  
  617.           Rev. November 13, 1986 23:39:28                               -8-
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.           Speaker Device Driver User's Guide
  626.  
  627.  
  628.  
  629.                The  speaker  device  driver intercepts calls to the
  630.           ROM BIOS that tell it to make a beep (by sending a binary
  631.           7,  or ASCII "BELL" character) and performs those itself,
  632.           instead.    All  characters  other  than the ASCII "BELL"
  633.           character are passed along to the ROM BIOS, as normal.
  634.  
  635.  
  636.           3.6  Changing the Sound of Your Beep
  637.  
  638.  
  639.                Besides making your machine's beeps take  less  time
  640.           away from your program,  the speaker device driver allows
  641.           you to redefine the way your machine's beep sounds.   You
  642.           can make it longer,  shorter,  higher, or lower.  You can
  643.           make the beeps happen quite  close  together,  such  that
  644.           they  are  almost  one continuous tone,  or you can space
  645.           them apart, so they have a silent gap in between.
  646.  
  647.                You can also change the beep such that  it  is  com-
  648.           posed of more than one frequency.  This can be useful if,
  649.           for  example,  you  do  not hear certain frequencies very
  650.           well.   You can make a beep which is composed of  several
  651.           frequencies, perhaps rising, perhaps lowering, perhaps in
  652.           an  alternating  sequence  or  even as sort of a warbling
  653.           sound.
  654.  
  655.                Personalizing your beep also allows you to tell,  if
  656.           you  have several processors in the same room,  which one
  657.           it was that made a beep.
  658.  
  659.                Some programs make their own beeps,  usually in  the
  660.           same  slow  way  that the ROM BIOS normally does.   Since
  661.           such programs do not use the ROM BIOS, these beeps cannot
  662.           be intercepted by the speaker device  driver.    However,
  663.           their  unchanged  tone  will  tell  you immediately which
  664.           programs these are!
  665.  
  666.                How to configure your beep to suit your  preferences
  667.           will be described in a later chapter.
  668.  
  669.  
  670.           3.7  Producing a Sequence of Tones
  671.  
  672.  
  673.                In  fact,  the  speaker  device driver is capable of
  674.  
  675.  
  676.  
  677.           Rev. November 13, 1986 23:39:35                               -9-
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.           Speaker Device Driver User's Guide
  686.  
  687.  
  688.  
  689.           producing nearly any sequence of  tones  you  like,  much
  690.           more than just a "beep".   You could actually program the
  691.           speaker device driver to play music,  if you  wanted  to.
  692.           And,  while  it  is doing that,  you can continue to edit
  693.           files, compile programs, and whatever,  just as you would
  694.           use your machine normally.
  695.  
  696.  
  697.           3.8  Buffered Tone Generation
  698.  
  699.  
  700.                The  reason  you  can  play music while your machine
  701.           runs other programs is because the speaker device  driver
  702.           contains  a  relatively  large  buffer which allows it to
  703.           "queue" long sequences of commands.  This permits several
  704.           tone generation commands to be sent to the speaker device
  705.           driver,  even if it has not finished the commands it  has
  706.           already received, without forcing the program sending the
  707.           commands to wait.
  708.  
  709.  
  710.           3.9  A New Device
  711.  
  712.  
  713.                You  can  use  the speaker device driver from nearly
  714.           any language or  program  you  like,  since  the  speaker
  715.           device  driver  adds  a  new device name to your computer
  716.           system.   Just as you can tell  most  programs  to  write
  717.           their  output  to CON: to send it to the console display,
  718.           or to LPT1: or PRN: to send it to your printer,  you  now
  719.           have  another  device  called  SPKR:  which allows you to
  720.           write commands to the speaker device driver.
  721.  
  722.                Supporting the  loudspeaker  with  a  device  driver
  723.           means  that  you can open the loudspeaker like a file and
  724.           write commands to it from nearly any language or  program
  725.           you like.
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.  
  733.  
  734.  
  735.  
  736.  
  737.           Rev. November 13, 1986 23:39:43                              -10-
  738.  
  739.  
  740.  
  741.  
  742.  
  743.  
  744.  
  745.           Speaker Device Driver User's Guide
  746.  
  747.  
  748.  
  749.  
  750.  
  751.           4.  SPEAKER DEVICE DRIVER COMMANDS
  752.  
  753.  
  754.                You  do not have to understand the command sequences
  755.           described in this  chapter  to  use  the  speaker  device
  756.           driver.   You can just install it and use it to eliminate
  757.           those frustrating delays while  your  programs  "get  the
  758.           beeps out of their system"!
  759.  
  760.                However, by understanding how to control the speaker
  761.           device  driver,  you can make it do a lot of other useful
  762.           things, too.  Besides, it's a lot of fun!
  763.  
  764.  
  765.           4.1  The Basics
  766.  
  767.  
  768.                Basically,  most speaker device driver commands con-
  769.           sist  of  ASCII  alphabetic  characters  (letters  of the
  770.           alphabet).   Sometimes,  these are preceded  by  numbers,
  771.           which  can  be  one  or  more  digits long,  based on the
  772.           specific command.   All numbers sent to  the  driver  are
  773.           converted to a maximum sixteen-bit (unsigned) binary num-
  774.           ber,  allowing  values of theoretically as high as 65535,
  775.           although most commands do not use values that big.    Any
  776.           non-printing  characters  (such as carriage return,  line
  777.           feed,  or form feed) that somehow get sent to the speaker
  778.           device driver are simply discarded.
  779.  
  780.                The actual alphabetic command characters can be sent
  781.           in either upper or lower case letters, the speaker device
  782.           driver does not care either way.
  783.  
  784.                Since  each  alphabetic  character terminates a com-
  785.           mand,  there is no  need  for  blanks,  commas  or  other
  786.           characters to separate commands.   You can just send them
  787.           adjacent to each other.   Or,  you might want to  include
  788.           spaces  between individual components of a command string
  789.           to improve the readability.
  790.  
  791.                Some commands  take  effect  as  soon  as  they  are
  792.           received,  but  other  commands just get "remembered" and
  793.           are used to control the way  that  subsequently  produced
  794.  
  795.  
  796.  
  797.           Rev. November 13, 1986 23:39:49                              -11-
  798.  
  799.  
  800.  
  801.  
  802.  
  803.  
  804.  
  805.           Speaker Device Driver User's Guide
  806.  
  807.  
  808.  
  809.           tones sound.
  810.  
  811.  
  812.           4.2  Commands Available
  813.  
  814.  
  815.                The  following sections describe the individual com-
  816.           mands.   All commands are buffered and take effect  "when
  817.           it is their turn", unless otherwise noted in the descrip-
  818.           tion of that command.
  819.  
  820.  
  821.           4.2.1  F - Frequency
  822.  
  823.  
  824.                This  command letter causes a tone to be produced at
  825.           the "current frequency".  The initial "current frequency"
  826.           when the speaker device driver gets loaded,  during  your
  827.           DOS bootstrap,  is 1000Hz.   (This is a typical frequency
  828.           for a "beep").   Note,  however,  that since the  speaker
  829.           device  driver  does  not get re-initialized just because
  830.           you change programs,  your program should not assume that
  831.           the "current frequency" is still set to 1000Hz,  since it
  832.           could have been changed by a previous program.
  833.  
  834.                To change the "current  frequency"  to  a  different
  835.           value,  put  the  frequency  desired,  as  a number,  im-
  836.           mediately preceding the "F" or "f" character.    For  ex-
  837.           ample, to produce a tone of 1500Hz, you would write
  838.  
  839.                1500F
  840.  
  841.                to  the  speaker device driver.   The "F" command by
  842.           itself will produce another tone of the same frequency as
  843.           was produced by the last "F" command.
  844.  
  845.  
  846.           4.2.2  G - Gap
  847.  
  848.  
  849.                This command letter sets the number of  timer  ticks
  850.           (there are approximately eighteen timer ticks per second)
  851.           of  silent time between individual tones.   The number of
  852.           timer ticks between tones is specified as  a  number  im-
  853.           mediately  preceding  the "G" or "g" character.   Typical
  854.  
  855.  
  856.  
  857.           Rev. November 13, 1986 23:39:56                              -12-
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.           Speaker Device Driver User's Guide
  866.  
  867.  
  868.  
  869.           values range from 0, the initial default value, to twenty
  870.           or so, although larger values can be specified.   For ex-
  871.           ample,  if  you want your beeps separated by a short gap,
  872.           you could send the command:
  873.  
  874.                2g
  875.  
  876.                to the speaker device driver.   Note that  you  only
  877.           need  to  send  this  command once,  whenever you want to
  878.           change the gap's duration.  The gap will then be inserted
  879.           by the speaker device driver at the end of each  tone  it
  880.           generates, until you change the gap again.
  881.  
  882.  
  883.           4.2.3  D - Duration of Each Tone
  884.  
  885.  
  886.                This  command letter tells the speaker device driver
  887.           how many timer ticks long each tone should be.   Like the
  888.           Gap  command,  this command produces no tones of its own.
  889.           It merely is used to set the value which  will  determine
  890.           the  length  of  tones produced by the following "F" com-
  891.           mands.  For example, to make each tone last about a third
  892.           of a second, you would send the command:
  893.  
  894.                6d
  895.  
  896.                to the speaker device driver.  The default duration,
  897.           when the driver is loaded, is five timer ticks.
  898.  
  899.  
  900.           4.2.4  T - Tempo
  901.  
  902.  
  903.                The value for tempo is used to scale the duration of
  904.           each tone.   This allows you  to  "globally"  change  the
  905.           duration  of a series of tones,  without having to change
  906.           each of the individual duration commands  that  might  be
  907.           contained in the sequence.
  908.  
  909.                A  tempo  value  of  256 indicates a "normal" tempo,
  910.           where "256t5d600f" would produce a 600Hz tone for a dura-
  911.           tion of five timer ticks.  To change the tempo to make it
  912.           faster,  the command "128t5d600f" would produce  a  600Hz
  913.           tone  for  a  duration of two or three timer ticks.   In-
  914.  
  915.  
  916.  
  917.           Rev. November 13, 1986 23:40:03                              -13-
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.           Speaker Device Driver User's Guide
  926.  
  927.  
  928.  
  929.           creasing the value in a command like  "512t5d600f"  would
  930.           produce  a  600Hz tone for a duration of ten timer ticks,
  931.           and so forth.
  932.  
  933.                Again,  the tempo value affects all following tones.
  934.           Larger  "tempo"  values  make  the  durations longer than
  935.           their normal times,  smaller "tempo" values make the tone
  936.           durations  shorter  than  their normal times.   Since the
  937.           duration of gaps is  usally  quite  short,  changing  the
  938.           tempo value does not affect the duration of gaps.  If you
  939.           do  change  the  "tempo"  value from its default value of
  940.           256,  it is only polite to remember to restore it to  its
  941.           previous value before your program returns to DOS!
  942.  
  943.  
  944.           4.2.5  P - Pause
  945.  
  946.  
  947.                This  is  a  strange command because it takes effect
  948.           immediately, and is not buffered.  When it is received by
  949.           the driver,  it causes it to not fetch any  new  commands
  950.           from its buffer for up to about five seconds (or until it
  951.           receives a "Resume" command,  see below),  whichever hap-
  952.           pens first.   This command is not usually  necessary,  so
  953.           don't worry if you don't understand it.
  954.  
  955.  
  956.           4.2.6  R - Resume
  957.  
  958.  
  959.                This strange command, like Pause, is not stored into
  960.           the  internal  buffer  used by the speaker device driver,
  961.           but takes effect immediately.   It causes the fetching of
  962.           commands  from  the device driver's buffer to be resumed,
  963.           allowing it to resume generating tones.  Note that, if no
  964.           resume command follows a pause command,  the  pause  will
  965.           time out anyway after about five seconds.
  966.  
  967.                The pause and resume commands allow you to make sure
  968.           that  several  commands are loaded into the buffer before
  969.           the first one of them  begins  executing,  in  case  your
  970.           program  generates  the  commands  rather  slowly  to the
  971.           driver,  but you want the commands to execute faster than
  972.           you can send them.
  973.  
  974.  
  975.  
  976.  
  977.           Rev. November 13, 1986 23:40:09                              -14-
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.           Speaker Device Driver User's Guide
  986.  
  987.  
  988.  
  989.  
  990.           4.2.7  B - Begin Recording
  991.  
  992.  
  993.                This  command  tells  the speaker device driver that
  994.           the following commands are not to be acted  on  at  once,
  995.           but  rather  that  they  are to be recorded in its memory
  996.           area for later use.    The commands that are recorded  in
  997.           this fashion are "played back" whenever a program wants a
  998.           "beep".
  999.  
  1000.                The memory area set aside for the recording is about
  1001.           128 bytes long.   If you try to record a sequence of com-
  1002.           mands longer than this,  the driver will reset  the  beep
  1003.           back  to  the default (which is a single "f" command) and
  1004.           stop the recording.
  1005.  
  1006.  
  1007.           4.2.8  E - End Recording
  1008.  
  1009.  
  1010.                This command is used  to  tell  the  speaker  device
  1011.           driver  that the commands preceding comprise the complete
  1012.           sequence to be used when it is asked to produce a "beep".
  1013.           For example, if you want to reconfigure your beep to be a
  1014.           1000Hz tone that is four timer ticks long, with two timer
  1015.           ticks worth of gap between each beep,  you would send the
  1016.           command string:
  1017.  
  1018.                b2g4d1000fe
  1019.  
  1020.                The  possibilities  are  nearly  endless.   However,
  1021.           several more examples of beeps you can configure will  be
  1022.           described in the next chapter.
  1023.  
  1024.  
  1025.           4.2.9  Unrecognized Commands
  1026.  
  1027.  
  1028.                Any   commands  which  are  unrecognized  cause  the
  1029.           speaker device driver to produce a clicking sound.
  1030.  
  1031.  
  1032.           4.2.10  Controlling the Volume
  1033.  
  1034.  
  1035.  
  1036.  
  1037.           Rev. November 13, 1986 23:40:17                              -15-
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.           Speaker Device Driver User's Guide
  1046.  
  1047.  
  1048.  
  1049.  
  1050.                Unfortunately,  the PC has no mechanism to allow for
  1051.           the control of the volume level from its speaker.
  1052.  
  1053.  
  1054.           4.2.11  Chords
  1055.  
  1056.  
  1057.                The  PC's  sound  generator  normally  produces  one
  1058.           frequency at a time,  as what is called a "square  wave".
  1059.           Any   attempt   to   produce   different   "simultaneous"
  1060.           frequencies (chords),  or other more sophisticated tones,
  1061.           would  require  constant  (and continuous) attention from
  1062.           the processor,  which is just the kind of delays that the
  1063.           speaker device driver was written to eliminate.  Sorry.
  1064.  
  1065.  
  1066.  
  1067.  
  1068.  
  1069.  
  1070.  
  1071.  
  1072.  
  1073.  
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.  
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.           Rev. November 13, 1986 23:40:23                              -16-
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.           Speaker Device Driver User's Guide
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.           5.  HOW TO CONFIGURE YOUR BEEP
  1112.  
  1113.  
  1114.                In the previous chapter,  how to configure your beep
  1115.           to be a fairly normal one was described.   In this  chap-
  1116.           ter,  several  other  possible  beeps  will be described,
  1117.           along with examples of the command strings that configure
  1118.           them.
  1119.  
  1120.  
  1121.           5.1  Several More Example Beeps
  1122.  
  1123.  
  1124.                If you wanted  your  beep  to  be  two  short  beeps
  1125.           separated by a longer gap, you could send the command:
  1126.  
  1127.                b2g2d1000f5dfe
  1128.  
  1129.                If  you  wanted  a beep which alternated between two
  1130.           tones, you could send the command:
  1131.  
  1132.                b0g3d400f1400f400f3g1400fe
  1133.  
  1134.                Notice in the above command string that we have told
  1135.           it there should not be  a  gap  between  the  four  tones
  1136.           produced  (there  are four tones because the command con-
  1137.           tains four "f"  commands,  each  of  which  produces  one
  1138.           tone).   The second Gap command,  "3g" must appear BEFORE
  1139.           the final "f" command,  if the three timer tick gap indi-
  1140.           cated  is  to  take effect following the last of the four
  1141.           tones.   Remember that each "f" command causes a tone  of
  1142.           the current frequency, for the current duration (possibly
  1143.           modified  by the current tempo),  followed by the current
  1144.           gap.
  1145.  
  1146.                Since you are allowed  approximately  128  bytes  to
  1147.           store  the definition of your personal beep,  you can see
  1148.           that you can make your own beep quite elaborate if you so
  1149.           desire.
  1150.  
  1151.                As one final example, if you wanted a beep which was
  1152.           composed of three  different  frequencies,  separated  by
  1153.           different lengths of gaps, you could specify a command:
  1154.  
  1155.  
  1156.  
  1157.           Rev. November 13, 1986 23:40:26                              -17-
  1158.  
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.           Speaker Device Driver User's Guide
  1166.  
  1167.  
  1168.  
  1169.  
  1170.                b1g2d800f2g1200f6g2400fe
  1171.  
  1172.                By now you should be getting the idea.  The best way
  1173.           to  get  a  feel  for  how  it works is to play with it a
  1174.           while,  and it's fun to do that,  anyway.    Next,  we'll
  1175.           describe one way to do just that.
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207.  
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.           Rev. November 13, 1986 23:40:33                              -18-
  1218.  
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.           Speaker Device Driver User's Guide
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.           6.  SENDING COMMANDS TO THE DRIVER
  1232.  
  1233.  
  1234.                This section will describe several ways you can send
  1235.           commands to the speaker device driver.
  1236.  
  1237.  
  1238.           6.1  From A Program
  1239.  
  1240.  
  1241.                You can,  as previously mentioned,  send commands to
  1242.           the speaker device driver from  any  program  you  write,
  1243.           written in nearly any imaginable language.  Normally, the
  1244.           way  to  do  this is to open a file with the name "SPKR:"
  1245.           (some languages prefer it without the ":" at the end) and
  1246.           write the command to it.
  1247.  
  1248.                NOTE:  With some languages,  you may have  to  close
  1249.           the file to force the data to be written to the driver if
  1250.           you  want  the command to take effect immediately,  since
  1251.           some languages don't write their output until their  file
  1252.           buffer  fills  up,  or  until they close their files just
  1253.           before returning to the operating system upon completion.
  1254.  
  1255.  
  1256.           6.2  From the Console Keyboard
  1257.  
  1258.  
  1259.                If all you want to do  is  to  experiment  with  the
  1260.           driver, you don't have to write a special program just to
  1261.           do that.  Here's one way (there are many other ways which
  1262.           would work as well).
  1263.  
  1264.                To send a command to the driver,  at the DOS prompt,
  1265.           enter:
  1266.  
  1267.                COPY CON: SPKR:
  1268.                <put your command you want to try here>
  1269.                ^Z
  1270.  
  1271.                Note that, like before, the final line "^Z" means to
  1272.           hold down the "Ctrl" key while you  press  the  "Z"  key.
  1273.           When you press this "Control-Z",  the command on the pre-
  1274.  
  1275.  
  1276.  
  1277.           Rev. November 13, 1986 23:40:35                              -19-
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.           Speaker Device Driver User's Guide
  1286.  
  1287.  
  1288.  
  1289.           vious line will be sent to the  driver,  and  you  should
  1290.           hear whatever the result will be.
  1291.  
  1292.                For  example,  you can configure your beep from your
  1293.           keyboard by entering the commands at the DOS prompt:
  1294.  
  1295.                COPY CON: SPKR:
  1296.                b3g5d660fe
  1297.                ^Z
  1298.  
  1299.                Note that the above command does not  let  you  hear
  1300.           the  new beep you have configured,  it just records it so
  1301.           it can be played back later.   If you just wanted to  try
  1302.           possible  command  strings,  you  could  test  the  above
  1303.           sequence to see if  it  is  the  way  you  wanted  it  by
  1304.           entering:
  1305.  
  1306.                COPY CON: SPKR:
  1307.                3g5d660f
  1308.                ^Z
  1309.  
  1310.                If  you  wanted  to  hear  it  the  way  it would be
  1311.           repeated, with the gaps between several beeps,  you could
  1312.           enter:
  1313.  
  1314.                COPY CON: SPKR:
  1315.                3g5d660ffff
  1316.                ^Z
  1317.  
  1318.  
  1319.           6.3  From a File
  1320.  
  1321.  
  1322.                Once  you  have found a beep that is uniquely "you",
  1323.           you will probably want to have it be set up automatically
  1324.           every time your machine reboots.  To do this,  just write
  1325.           the  beep command string you like to a file.   You can do
  1326.           this with any editor of your choice,  or again you  could
  1327.           just use copy:
  1328.  
  1329.                COPY CON: MYBEEP.TXT
  1330.                b<your favorite beep sequence>e
  1331.                ^Z
  1332.  
  1333.                You can confirm that it has been stored correctly on
  1334.  
  1335.  
  1336.  
  1337.           Rev. November 13, 1986 23:40:41                              -20-
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345.           Speaker Device Driver User's Guide
  1346.  
  1347.  
  1348.  
  1349.           disk by keying the command:
  1350.  
  1351.                TYPE MYBEEP.TXT
  1352.  
  1353.                and  the  result  should be the beep command you en-
  1354.           tered.  Then, edit your \AUTOEXEC.BAT file and put in the
  1355.           command:
  1356.  
  1357.                COPY MYBEEP.TXT SPKR:
  1358.  
  1359.                After doing  this,  each  time  your  computer  gets
  1360.           rebooted,  it  will  automatically configure your beep to
  1361.           sound just the way you want it to.
  1362.  
  1363.  
  1364.           6.3.1  Sending Other Sequences
  1365.  
  1366.  
  1367.                You can, of course,  send sequences other than those
  1368.           which configure your beep from a disk file to the speaker
  1369.           device driver.   In fact, you could write an entire musi-
  1370.           cal selection as a series of device driver  commands  and
  1371.           store them into a file.   Copying this file to the device
  1372.           SPKR: as in the way just described will start the musical
  1373.           selection playing,  and you can go ahead to  do  whatever
  1374.           you want with your computer while the selection plays.
  1375.  
  1376.                Although  the buffer in the speaker device driver is
  1377.           quite large,  it is not infinite.   If you send extremely
  1378.           long  command sequences to the speaker device driver,  it
  1379.           is possible that you  will  fill  the  buffer  completely
  1380.           full.    In this case,  the program sending to the buffer
  1381.           will automatically wait until there is room enough in the
  1382.           buffer for it to finish sending everything.
  1383.  
  1384.                Sending  other  command  sequences  to  the  speaker
  1385.           device  driver  does not interfere with the beep you have
  1386.           configured.  You could play the entire William Tell Over-
  1387.           ture, and then tell your machine to "beep",  and you will
  1388.           still  get  the  "beep"  the  way  it was previously con-
  1389.           figured.
  1390.  
  1391.  
  1392.           6.4  Testing Your Beep
  1393.  
  1394.  
  1395.  
  1396.  
  1397.           Rev. November 13, 1986 23:40:47                              -21-
  1398.  
  1399.  
  1400.  
  1401.  
  1402.  
  1403.  
  1404.  
  1405.           Speaker Device Driver User's Guide
  1406.  
  1407.  
  1408.  
  1409.  
  1410.                As mentioned before,  you can easily test your  beep
  1411.           any time you want to.  Just enter, at the DOS prompt, the
  1412.           command:
  1413.  
  1414.                ECHO ^G
  1415.  
  1416.                and  your  beep will play back,  just the way you've
  1417.           configured it.
  1418.  
  1419.  
  1420.  
  1421.  
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.  
  1441.  
  1442.  
  1443.  
  1444.  
  1445.  
  1446.  
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.           Rev. November 13, 1986 23:40:53                              -22-
  1458.  
  1459.  
  1460.  
  1461.  
  1462.  
  1463.  
  1464.  
  1465.           Speaker Device Driver User's Guide
  1466.  
  1467.  
  1468.  
  1469.  
  1470.  
  1471.           7.  ABOUT THE AUTHOR
  1472.  
  1473.  
  1474.                I think it is important for those of us in the  com-
  1475.           puting  profession  to  get to know each other.   Just as
  1476.           "ShareWare" software can help to extend the reach of  the
  1477.           programs  we  write,  hopefully this concept will help to
  1478.           extend our interpersonal network of contacts as well.  It
  1479.           is not necessary that software authors be condemned to  a
  1480.           life  of  anonymity!     I  encourage  other  authors  of
  1481.           "ShareWare" products to further this personal and profes-
  1482.           sional networking by telling us about themselves as well.
  1483.  
  1484.                The Speaker Device Driver was  written  in  1986  by
  1485.           Gordon E. Peterson II.  I have been writing computer sys-
  1486.           tem  software  in  assembly  language  for  about sixteen
  1487.           years,  starting as  a  Computer  Science  major  at  the
  1488.           University of Illinois in Champaign-Urbana.   This was my
  1489.           first exposure to IBM equipment, learning on their 360/75
  1490.           system (a BIG computer at the time,  with a million bytes
  1491.           of  main memory and two megabytes more of slow Ampex bulk
  1492.           core memory.   It is astonishing to realize that  I  have
  1493.           nearly  that  much  memory,  and much faster too,  on the
  1494.           machine on the table in front of me).
  1495.  
  1496.                During a little over nine  years  after  getting  my
  1497.           degree,  I  worked  in  Advanced  Product  Development at
  1498.           Datapoint Corporation.
  1499.  
  1500.                On the off chance that you might  be  familiar  with
  1501.           Datapoint,  I  was the developer of the "Dot-Series" disk
  1502.           operating systems there,  being  responsible  for  DOS.A,
  1503.           DOS.B,  DOS.C,  DOS.D,  and  DOS.E.   I was the author of
  1504.           their high-speed  disk  BACKUP  and  COPY  programs,  the
  1505.           REFORMAT utility,  and their DUMP utility,  among others.
  1506.           I wrote their Multi-Partition Virtual  Machine  facility,
  1507.           called  PS  (for  Partition Supervisor),  and their high-
  1508.           performance print unspooler (called UNSPOOL).    My  most
  1509.           notable  software product I created there was the DOS ARC
  1510.           System, which was the world's first commercially success-
  1511.           ful local area network.   This  product  eventually  sold
  1512.           over a billion dollars' worth of hardware for Datapoint.
  1513.  
  1514.  
  1515.  
  1516.  
  1517.           Rev. November 13, 1986 23:40:55                              -23-
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.           Speaker Device Driver User's Guide
  1526.  
  1527.  
  1528.  
  1529.                At various other stages of my career,  I have worked
  1530.           with quite a variety of machines and  equipment,  ranging
  1531.           from   several   different   kinds   of   mainframes   to
  1532.           microprocessor control software for a very  sophisticated
  1533.           discotheque lighting control system;   an advanced credit
  1534.           card telephone;  a museum exhibit controller running four
  1535.           stereo tape decks, thirty loudspeakers and a similar num-
  1536.           ber of spotlights;  to  the  development  of  least-cost-
  1537.           routing  software  controlling  telephone  central office
  1538.           switching equipment.
  1539.  
  1540.                Besides computers, my other interests include video,
  1541.           stereo  equipment,  (and  in  fact  most  kinds  of  home
  1542.           electronics),  massage,  travel (especially interested in
  1543.           ocean liners and trains), Citroens (a French automobile),
  1544.           and meeting people.
  1545.  
  1546.                If you find this Speaker Device Driver to be  useful
  1547.           for  you,  and  you decide you would like to help support
  1548.           this experiment in "ShareWare", your contributions toward
  1549.           that end would be appreciated.   Also,  if you would just
  1550.           like to write,  that is certainly welcome too!  Perhaps I
  1551.           will reconnect with some old friends,  and make some  new
  1552.           ones too, this way.
  1553.  
  1554.                If you come up with any music or other command files
  1555.           for  the  Speaker  Device  Driver  that you would like to
  1556.           share with others,  I would appreciate your sending me  a
  1557.           copy of them,  too.   (On diskette,  preferably!)  I will
  1558.           consider these for inclusion on subsequent  revisions  of
  1559.           the distribution diskette.
  1560.  
  1561.                You can write to me at:
  1562.  
  1563.                Gordon E. Peterson II
  1564.                Noah Systems
  1565.                P.O. Box 40476
  1566.                San Antonio, Texas  78229-0476
  1567.  
  1568.                Since  I  am currently (late 1986) spending a lot of
  1569.           time outside the United States,  please  allow  time  for
  1570.           mail to be forwarded to me.  I'm looking forward to hear-
  1571.           ing from you!
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.           Rev. November 13, 1986 23:41:04                              -24-
  1578.  
  1579.  
  1580.